package com.springbootblog.controller.fontend.thread;

public class MarryTest
{
    public static void main(String[] args)
    {
        // 直接调用
        Me me = new Me();
        me.happyMarry();

        System.out.println("=================================");

        // 静态代理
        MarryProxy marryProxy = new MarryProxy(me);
        marryProxy.happyMarry();
    }

    /**
     * 结婚接口，后边 我以及婚庆公司都需要实现这个接口
     */
    public interface marray
    {
        void happyMarry();
    }

    /**
     * 真是角色：我
     */
    public static class Me implements marray
    {
        @Override
        public void happyMarry()
        {
            System.out.println("Marray is very happy");
        }
    }

    /**
     * 婚庆公司：代理我的婚礼
     */
    public static class MarryProxy implements marray
    {
        /**
         * 代理对象
         */
        private Me me;

        /**
         * 代理对象
         * @param me
         */
        public MarryProxy(Me me)
        {
            this.me = me;
        }

        /**
         * 结婚之前，婚庆公司代理做的事情
         */
        private void before()
        {
            System.out.println("Marry before");
        }

        /**
         * 结婚之后，婚庆公司代理做的事情
         */
        private void after()
        {
            System.out.println("Marry after");
        }

        /**
         * 实现接口
         */
        @Override
        public void happyMarry()
        {
            // 婚庆公司代理做的事情
            this.before();
            // 通过代理调用 me 中的方法
            me.happyMarry();
            // 婚庆公司代理做的事情
            this.after();
        }
    }
}
